package simple;

import java.util.HashMap;

/**
 * Description:
 * 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 * @author: Faker
 * Date: 2020-11-05
 * Time: 15:05
 */
public class Code_387 {
    /**
     * 用hashmap辅助判断
     * @param s
     * @return
     */
    public int firstUniqChar(String s) {
        HashMap<Character,Integer> map = new HashMap<>();
        for (int i=0;i<s.length();i++){
            if (map.get(s.charAt(i)) == null){
                map.put(s.charAt(i),1);
            }else{
                map.put(s.charAt(i),map.get(s.charAt(i))+1);
            }
        }
        for (int i=0;i<s.length();i++){
            if (map.get(s.charAt(i)) == 1){
                return i;
            }
        }
        return -1;
    }

    /**
     * 直接双重循环
     * @param s
     * @return
     */
    public int firstUniqChar1(String s) {
        if(s.length()==1){
            return 0;
        }

        for(int i=0;i<s.length();i++){
            boolean flag = true;
            for(int t=0;t<s.length();t++){
                if (i == t){
                    continue;
                }
                if(s.charAt(i) == s.charAt(t)){
                    flag = false;
                    break;
                }
            }
            if(flag){
                return i;
            }
        }
        return -1;
    }

    /**
     * 改用数组存储
     * @param s
     * @return
     */
    public int firstUniqChar2(String s) {
        int[] nums = new int[26];
        char[] chars = s.toCharArray();
        for(char ch: chars) {
            nums[ch - 'a']++;
        }
        for(int i=0; i<chars.length; i++) {
            if(nums[chars[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }


    public static void main(String[] args) {
        Code_387 code_387 = new Code_387();
        String ss = "abbbacd";
        int index = code_387.firstUniqChar2(ss);
        System.out.println(index);
    }
}
